﻿#region 참조 네임스페이스

using System;

#endregion

namespace Skying.Reflection.Update
{
	/// <summary>
	/// <see cref="Skying.Reflection.Update.FileApplier"/>에서 발생하는 오류를 정의한다.
	/// </summary>
	public class UpdateException : Exception
	{
		#region 프로퍼티

		/// <summary>
		/// 오류와 관련된 업데이트 게이트웨이 정보를 가져온다.
		/// </summary>
		public UpdateSchemaGateway Gateway
		{
			get;
			protected set;
		}

		/// <summary>
		/// 오류와 관련된 상태를 가져온다.
		/// </summary>
		public UpdateStatus Status
		{
			get;
			protected set;
		}

		#endregion

		#region 생성자/소멸자

		public UpdateException(Exception error, UpdateStatus status)
			: base(error.Message, error)
		{
			this.Status = status;
		}

		public UpdateException(Exception error, UpdateSchemaGateway gateway, UpdateStatus status)
			: base(error.Message, error)
		{
			this.Gateway = gateway;

			this.Status = status;
		}

		public UpdateException(string message, Exception error, UpdateStatus status)
			: base(message, error)
		{
			this.Status = status;
		}

		public UpdateException(string message, Exception error, UpdateSchemaGateway gateway, UpdateStatus status)
			: base(message, error)
		{
			this.Gateway = gateway;

			this.Status = status;
		}

		#endregion
	}
}